package com.koala.swb.i18n;

import java.util.Locale;
import java.util.Map;

import com.koala.excepcion.Excepcion;
import com.koala.swb.i18n.resources.Estante;

/**
 * 
 * @author cerokool32
 * @category Lenguage
 */
public class Biblioteca {
	
	private String app;
	private Locale[] regiones;
	
	private String defaultTomo;
	private Locale defaultRegion;
	
	//mapa de tomo<->estante
	private Map<String,Estante> estantes;
	
	/**
	 * Constructor que establece el nombre de la biblioteca de acuerdo a l nombre de la aplicacion.
	 * @param app Nombre de la aplicacion.
	 */
	public Biblioteca(String app) {
		
		this.app=app;
		
	}
	
	/**
	 * Establece un estante para la biblioteca tomando los diccionarios de un tomo en la gama de regiones que se solicite.
	 * @param tomo Tomo del diccionario a seleccionar.
	 * @param regiones Arreglo de regiones que se seleccionaran de acuerdo al tomo.
	 * @throws Excepcion Error en caso de que no se encuentren los tomos o regiones.
	 */
	public void SetEstante(String tomo, Locale[] regiones) throws Excepcion{
		
		this.regiones=regiones;
		
		Estante st;
		
		st=new Estante(app, tomo, this.regiones);
		
		estantes.put(tomo, st);
						
	}
	
	/**
	 * Establece un estante por defecto.
	 * @param tomo Tomo que se establecera por defecto.
	 * @param region Region que se establecera por defecto.
	 */
	public void SetDefaultEstante(String tomo, Locale region){
		
		defaultRegion=region;
		defaultTomo=tomo;
		
		estantes.get(defaultTomo).SetDiccionarioActual(defaultRegion);
		
	}
	
	/**
	 * Obtiene una definicion de acuerdo a un identificador.
	 * @param identificador Identificador de la definicion.
	 * @return Definicion.
	 */
	public String GetDefinicion(String identificador){
		
		return estantes.get(defaultTomo).GetDefinicion(identificador);
		
	}
	
	/**
	 * Obtiene un estante de diccionarios de acuerdo al tomo seleccionado.
	 * @param tomo Tomo que establece que estante se seleccionara.
	 * @return Estante de diccionarios para el tomo seleccionado.
	 */
	public Estante GetEstante(String tomo){
		
		return estantes.get(tomo);
		
	}
	
}
